Перейти к основному содержимому

5.16. Справочник по Visual Basic

Разработчику Архитектору

Справочник по Visual Basic

Visual Basic — это объектно-ориентированный язык программирования, разработанный Microsoft как часть платформы .NET. Он поддерживает декларативный синтаксис, упрощённую работу с графическим интерфейсом и интеграцию с Windows API, COM-объектами и другими компонентами экосистемы .NET.

Этот справочник охватывает:

  • базовые типы данных;
  • операторы;
  • управляющие конструкции;
  • процедуры и функции;
  • классы и объекты;
  • свойства и события;
  • модули и пространства имён;
  • стандартные функции;
  • атрибуты и директивы компилятора;
  • особенности работы с WinForms и WPF (в контексте VB);
  • часто используемые значения перечислений и констант.

1. Типы данных

Целочисленные типы

ТипДиапазонРазмер (байт)
SByteот -128 до 1271
Byteот 0 до 2551
Shortот -32 768 до 32 7672
UShortот 0 до 65 5352
Integerот -2 147 483 648 до 2 147 483 6474
UIntegerот 0 до 4 294 967 2954
Longот -9 223 372 036 854 775 808 до 9 223 372 036 854 775 8078
ULongот 0 до 18 446 744 073 709 551 6158

Числа с плавающей точкой

ТипДиапазонТочностьРазмер
Single±1.5 × 10⁻⁴⁵ до ±3.4 × 10³⁸~7 цифр4 байта
Double±5.0 × 10⁻³²⁴ до ±1.7 × 10³⁰⁸~15–16 цифр8 байт
Decimal±1.0 × 10⁻²⁸ до ±7.9 × 10²⁸28–29 цифр16 байт

Логический тип

  • Boolean: принимает значения True или False.

Символьные и строковые типы

  • Char: один символ Unicode (2 байта).
  • String: неизменяемая последовательность символов переменной длины.
  • StringBuilder: изменяемая строка (из пространства имён System.Text).

Другие типы

  • Date: представляет дату и время от 1 января 0001 до 31 декабря 9999.
  • Object: универсальный тип, может содержать любой ссылочный или значимый тип.
  • DBNull: представляет отсутствие значения в базе данных.
  • IntPtr / UIntPtr: указатели для взаимодействия с нативным кодом.

2. Операторы

Арифметические операторы

  • + — сложение
  • - — вычитание
  • * — умножение
  • / — деление с результатом типа Double
  • \ — целочисленное деление
  • Mod — остаток от деления
  • ^ — возведение в степень

Операторы сравнения

  • = — равенство
  • <> — неравенство
  • <, >, <=, >= — сравнения

Логические операторы

  • And — логическое И
  • Or — логическое ИЛИ
  • Xor — исключающее ИЛИ
  • Not — логическое НЕ
  • AndAlso — короткозамкнутое И
  • OrElse — короткозамкнутое ИЛИ

Операторы присваивания

  • = — присваивание значения
  • +=, -=, *=, /=, \=, ^= — составные присваивания

Операторы объединения и конкатенации

  • & — конкатенация строк (рекомендуется)
  • + — также может использоваться для конкатенации, но менее надёжен

Операторы проверки типов

  • Is — проверка ссылочного равенства
  • IsNot — отрицание Is
  • TypeOf … Is — проверка принадлежности к типу
  • TryCast — безопасное приведение типа
  • DirectCast — прямое приведение без проверки
  • CType — преобразование с вызовом методов преобразования

3. Управляющие конструкции

Условные операторы

If условие Then
' действия
ElseIf другое_условие Then
' другие действия
Else
' действия по умолчанию
End If
Select Case выражение
Case значение1
' действия
Case значение2 To значение3
' диапазон
Case Is > 100
' условие
Case Else
' по умолчанию
End Select

Циклы

For…Next

For i As Integer = 0 To 10 Step 2
' тело цикла
Next

For Each…Next

For Each item In коллекция
' обработка элемента
Next

Do…Loop

Do While условие
' тело
Loop

Do Until условие
' тело
Loop

Do
' тело
Loop While условие

Do
' тело
Loop Until условие

While…End While (устаревший, но поддерживается)

While условие
' тело
End While

Операторы перехода

  • Exit For — выход из цикла For
  • Exit Do — выход из цикла Do
  • Exit While — выход из цикла While
  • Exit Sub — выход из процедуры
  • Exit Function — выход из функции
  • Continue For — переход к следующей итерации For
  • Continue Do — переход к следующей итерации Do

4. Процедуры и функции

Sub-процедуры

Sub ИмяПроцедуры(параметры)
' тело
End Sub

Параметры могут быть:

  • ByVal — передача по значению (по умолчанию)
  • ByRef — передача по ссылке

Пример:

Sub Приветствие(ByVal имя As String)
Console.WriteLine("Привет, " & имя)
End Sub

Function-функции

Function ИмяФункции(параметры) As ТипВозврата
' вычисления
Return значение
End Function

Пример:

Function Сумма(a As Integer, b As Integer) As Integer
Return a + b
End Function

Необязательные параметры

Sub Пример(Optional ByVal x As Integer = 10)
' если x не указан, используется 10
End Sub

Параметры с переменным числом аргументов

Sub СписокИмён(ParamArray имена() As String)
For Each имя In имена
Console.WriteLine(имя)
Next
End Sub

5. Классы и объекты

Объявление класса

Public Class Автомобиль
Public Марка As String
Public ГодВыпуска As Integer

Public Sub Завести()
Console.WriteLine("Двигатель запущен")
End Sub
End Class

Конструкторы

Public Sub New(марка As String)
Me.Марка = марка
End Sub

Свойства

Private _скорость As Integer

Public Property Скорость() As Integer
Get
Return _скорость
End Get
Set(value As Integer)
If value >= 0 Then
_скорость = value
End If
End Set
End Property

Автоматические свойства:

Public Property Цвет As String

Методы

Методы — это процедуры или функции внутри класса. Они могут быть:

  • Public, Private, Protected, Friend, Protected Friend

События

Public Event ДвижениеНачато()

Public Sub Двигаться()
RaiseEvent ДвижениеНачато()
End Sub

Подписка на событие:

AddHandler авто.ДвижениеНачато, AddressOf Обработчик

6. Модули и пространства имён

Модуль

Module ГлобальныеФункции
Public Sub ПечатьПривет()
Console.WriteLine("Привет из модуля!")
End Sub
End Module

Модуль — это статический класс, все члены которого автоматически статичны.

Пространство имён

Namespace МояБиблиотека.Транспорт
Public Class Поезд
' ...
End Class
End Namespace

Использование:

Imports МояБиблиотека.Транспорт

7. Стандартные функции и классы

Работа со строками (Strings)

  • Len(str) — длина строки
  • Mid(str, start, [length]) — извлечение подстроки
  • Left(str, n), Right(str, n) — левая/правая часть
  • InStr(str, substr) — поиск подстроки
  • Replace(str, old, new) — замена
  • Trim(str), LTrim, RTrim — удаление пробелов
  • UCase(str), LCase(str) — регистр
  • StrConv(str, vbProperCase) — заглавные буквы в словах

Преобразования типов

  • CInt(x) — в целое
  • CDbl(x) — в Double
  • CStr(x) — в строку
  • CBool(x) — в Boolean
  • CDate(x) — в Date

Работа с датами

  • Now — текущая дата и время
  • Today — текущая дата
  • DateAdd(interval, number, date) — добавление интервала
  • DateDiff(interval, date1, date2) — разница между датами
  • Year(d), Month(d), Day(d) — компоненты даты
  • Weekday(d) — день недели (1 = воскресенье по умолчанию)

Интервалы: "yyyy", "q", "m", "y", "d", "w", "ww", "h", "n", "s"

Математические функции (Math)

  • Math.Abs(x)
  • Math.Sqrt(x)
  • Math.Pow(x, y)
  • Math.Round(x, decimals)
  • Math.Floor(x), Math.Ceiling(x)
  • Math.Sin(x), Math.Cos(x), Math.Tan(x) — в радианах
  • Math.PI

Работа с файлами (My.Computer.FileSystem)

  • FileExists(path)
  • ReadAllText(path)
  • WriteAllText(path, content)
  • CopyFile(src, dest)
  • DeleteFile(path)
  • DirectoryExists(path)
  • CreateDirectory(path)

8. WinForms: основные элементы управления

Общие свойства всех контролов

  • Name — имя компонента
  • Text — отображаемый текст
  • Location — координаты (Point)
  • Size — размер (Size)
  • Visible — видимость
  • Enabled — доступность
  • TabIndex — порядок перехода по Tab
  • Font — шрифт
  • ForeColor, BackColor — цвета

Button

  • Click — событие нажатия
  • DialogResult — результат диалога (если кнопка в форме)

TextBox

  • Text — содержимое
  • Multiline — многострочный режим
  • MaxLength — максимальная длина
  • PasswordChar — символ маскировки
  • ReadOnly — только для чтения
  • ScrollBars — полосы прокрутки

Label

  • AutoSize — автоматический размер
  • TextAlign — выравнивание текста

CheckBox

  • Checked — состояние
  • CheckStateChecked, Unchecked, Indeterminate

RadioButton

  • Checked — выбран ли
  • Группировка через GroupBox или общий контейнер

ComboBox

  • Items — коллекция элементов
  • DropDownStyleDropDown, DropDownList, Simple
  • SelectedIndex, SelectedItem, SelectedValue

ListBox

  • Items.Add(item)
  • SelectedIndex
  • SelectionModeOne, MultiSimple, MultiExtended

PictureBox

  • Image — изображение
  • SizeModeNormal, StretchImage, AutoSize, CenterImage, Zoom

Timer

  • Interval — в миллисекундах
  • Enabled — запуск/остановка
  • Tick — событие

Form

  • StartPositionManual, CenterScreen, WindowsDefaultLocation
  • WindowStateNormal, Minimized, Maximized
  • FormBorderStyle — стиль рамки
  • AcceptButton, CancelButton — кнопки по умолчанию
  • Show(), ShowDialog(), Close()

9. Перечисления (Enums) — часто используемые значения

DialogResult

  • OK, Cancel, Abort, Retry, Ignore, Yes, No

MessageBoxIcon

  • None, Error, Question, Exclamation, Information

MessageBoxButtons

  • OK, OKCancel, AbortRetryIgnore, YesNoCancel, YesNo, RetryCancel

FileDialog

  • OpenFileDialog, SaveFileDialog
  • Свойства: FileName, Filter, InitialDirectory, Title
  • Filter пример: "Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*"

10. Директивы компилятора

  • #Const DEBUG = True
  • #If DEBUG Then … #End If
  • #Region "Имя" — сворачиваемый блок кода
  • #ExternalSource — для отладки сгенерированного кода

11. Атрибуты

  • <Serializable()> — разрешает сериализацию
  • <Obsolete("Сообщение")> — помечает как устаревшее
  • <DllImport("user32.dll")> — для вызова нативных функций
  • <STAThread()> — для главного потока Windows Forms

12. Обработка исключений

Try
' опасный код
Catch ex As IOException
' обработка ошибки ввода-вывода
Catch ex As Exception
' общая ошибка
Finally
' всегда выполняется
End Try

13. Особенности Visual Basic (.NET)

My-объекты

Visual Basic предоставляет глобальный объект My, упрощающий доступ к часто используемым функциям:

  • My.Application — информация о приложении
  • My.Computer — работа с файловой системой, сетью, портами
  • My.Forms — доступ ко всем формам проекта по имени
  • My.Settings — хранение и загрузка пользовательских настроек
  • My.Resources — доступ к внедрённым ресурсам (строки, изображения)
  • My.User — информация о текущем пользователе Windows

Пример:

My.Computer.FileSystem.WriteAllText("log.txt", "Запись", True)
Dim имяПользователя As String = My.User.Name

Late Binding (позднее связывание)

VB.NET поддерживает позднее связывание через тип Object без явного приведения:

Dim obj As Object = CreateObject("Scripting.FileSystemObject")
obj.CreateTextFile("test.txt")

Это требует включения опции Option Strict Off (по умолчанию в старых проектах).

Option-директивы

  • Option Explicit On/Off — обязательное объявление переменных (рекомендуется On)
  • Option Strict On/Off — строгая типизация (рекомендуется On для безопасности)
  • Option Infer On/Off — вывод типа через Dim x = 5x As Integer

Синтаксические удобства

  • With … End With — группировка обращений к одному объекту:

    With кнопка
    .Text = "Нажми"
    .Width = 100
    .Enabled = True
    End With
  • Необязательные скобки: Call Метод() или просто Метод()

  • Автоматическое преобразование строк в числа (при Option Strict Off)

  • Поддержка XML-литералов (уникальная черта VB.NET):

    Dim xml = <книга>
    <название>Вселенная IT</название>
    </книга>
    Console.WriteLine(xml.<название>.Value)

14. LINQ в Visual Basic

LINQ (Language Integrated Query) позволяет выполнять запросы к массивам, спискам, базам данных прямо в коде.

Синтаксис запроса

Dim числа = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

Dim чётные = From n In числа
Where n Mod 2 = 0
Select n

For Each n In чётные
Console.WriteLine(n)
Next

Методы расширения

Dim результат = числа.Where(Function(x) x > 5).OrderBy(Function(x) x).ToArray()

Работа с объектами

Class Студент
Public Имя As String
Public Возраст As Integer
End Class

Dim студенты = {
New Студент With {.Имя = "Анна", .Возраст = 20},
New Студент With {.Имя = "Борис", .Возраст = 22}
}

Dim взрослые = From с In студенты
Where с.Возраст >= 21
Select с.Имя

15. Асинхронное программирование

VB.NET поддерживает Async/Await начиная с .NET Framework 4.5.

Async Function ЗагрузитьДанные() As Task(Of String)
Dim client As New HttpClient()
Dim содержимое As String = Await client.GetStringAsync("https://example.com")
Return содержимое
End Function

' Вызов
Dim данные As String = Await ЗагрузитьДанные()

Правила:

  • Метод с Await должен быть помечен как Async
  • Возвращаемый тип — Task, Task(Of T), или Sub (для обработчиков событий)
  • Нельзя использовать Await в свойствах

16. Работа с коллекциями

Основные типы

  • List(Of T) — динамический массив
  • Dictionary(Of TKey, TValue) — словарь (ключ-значение)
  • HashSet(Of T) — уникальные элементы без порядка
  • Queue(Of T) — очередь (FIFO)
  • Stack(Of T) — стек (LIFO)

Примеры

Dim имена As New List(Of String)
имена.Add("Тимур")
имена.RemoveAt(0)

Dim возрасты As New Dictionary(Of String, Integer)
возрасты("Анна") = 25
If возрасты.ContainsKey("Анна") Then
Console.WriteLine(возрасты("Анна"))
End If

17. Настройки проекта (в контексте учебного материала)

В Visual Studio при создании проекта VB доступны следующие ключевые параметры:

Application (Приложение)

  • Startup object — точка входа (Sub Main или форма)
  • Application type — Windows Forms App, Console App, Class Library
  • Enable application framework — включает My.Application, обработку исключений и т.д.
  • Shutdown mode — закрытие приложения при закрытии последней формы или главной формы

Compile (Компиляция)

  • Option Explicit, Strict, Infer
  • Target CPU — AnyCPU, x86, x64
  • Optimize code — включить оптимизацию
  • Treat all warnings as errors

Debug (Отладка)

  • Start Action — запуск внешней программы, URL или конкретного исполняемого файла
  • Command line arguments — аргументы командной строки
  • Environment variables

References (Ссылки)

  • Добавление сборок .NET (System.IO, System.Net.Http и др.)
  • NuGet-пакеты
  • COM-объекты (через Interop)

Resources и Settings

  • Resources — строки, изображения, файлы (доступ через My.Resources)
  • Settings — пользовательские и прикладные настройки (доступ через My.Settings)

18. Работа с XML и JSON

XML (через XElement и XML-литералы)

Dim документ = <?xml version="1.0"?>
<каталог>
<товар id="1">
<название>Мышь</название>
<цена>990</цена>
</товар>
</каталог>

For Each товар In документ...<товар>
Console.WriteLine(товар.<название>.Value)
Next

JSON (через Newtonsoft.Json или System.Text.Json)

Установка через NuGet: Newtonsoft.Json

Imports Newtonsoft.Json

Dim json = "{""имя"":""Тимур"",""возраст"":31}"
Dim данные = JsonConvert.DeserializeObject(Of Dictionary(Of String, Object))(json)
Console.WriteLine(данные("имя"))

19. Многопоточность

Thread

Dim поток As New Threading.Thread(Sub()
Console.WriteLine("Работа в фоне")
End Sub)
поток.Start()

ThreadPool

Threading.ThreadPool.QueueUserWorkItem(Sub(state)
Console.WriteLine("Из пула")
End Sub)

Task (рекомендуется)

Dim задача = Task.Run(Sub()
' тяжёлая операция
End Sub)
Await задача

20. Сериализация

BinaryFormatter (устаревший, небезопасен)

Не рекомендуется. Используйте альтернативы.

XmlSerializer

Dim сериализатор As New XmlSerializer(GetType(СписокТоваров))
Using поток As New FileStream("товары.xml", FileMode.Create)
сериализатор.Serialize(поток, мойСписок)
End Using

JsonSerializer (System.Text.Json)

Dim json As String = JsonSerializer.Serialize(мойОбъект)
Dim восстановленный = JsonSerializer.Deserialize(OfType(МойКласс))(json)

21. Обработка событий и делегаты

Делегат

Public Delegate Sub СообщениеДелегат(сообщение As String)

Событие с пользовательским аргументом

Public Class ДанныеИзмененыEventArgs
Inherits EventArgs
Public Property Изменено As String
End Class

Public Event ДанныеИзменены As EventHandler(Of ДанныеИзмененыEventArgs)

RaiseEvent ДанныеИзменены(Me, New ДанныеИзмененыEventArgs With {.Изменено = "Поле X"})

22. Распространённые ошибки и советы

  • Всегда включайте Option Strict On в новых проектах.
  • Используйте Using для автоматического освобождения ресурсов:
    Using файл As New StreamReader("data.txt")
    Dim содержимое = файл.ReadToEnd()
    End Using
  • Избегайте позднего связывания в производственном коде.
  • Для WinForms не изменяйте UI из фонового потока — используйте Invoke:
    If Me.InvokeRequired Then
    Me.Invoke(Sub() Метка.Text = "Обновлено")
    Else
    Метка.Text = "Обновлено"
    End If

23. Интеграция с другими технологиями

COM-объекты (например, Excel)

Dim excel = CreateObject("Excel.Application")
excel.Visible = True
Dim книга = excel.Workbooks.Add()

Требует ссылки на Microsoft.Office.Interop.Excel.

Работа с базами данных (через ADO.NET)

Using соединение As New SqlConnection("строка_подключения")
соединение.Open()
Dim команда As New SqlCommand("SELECT Имя FROM Пользователи", соединение)
Dim читатель = команда.ExecuteReader()
While читатель.Read()
Console.WriteLine(читатель("Имя"))
End While
End Using

24. Отладка и диагностика

  • Точки останова (Breakpoints)
  • Окно Immediate (?переменная)
  • Логирование через Debug.WriteLine или Trace.WriteLine
  • Профилирование производительности в Visual Studio